feat(server-ai): stamp model metadata on AI usage events#192
Open
atornsii wants to merge 9 commits into
Open
Conversation
Co-authored-by: Anthony Torns II <[email protected]>
Co-authored-by: Anthony Torns II <[email protected]>
Co-authored-by: Anthony Torns II <[email protected]>
Co-authored-by: Anthony Torns II <[email protected]>
…oken test Model.getModelKey() previously returned an empty string for a blank-but-present modelKey payload value, contradicting its own Javadoc contract and diverging from TrackData/tracker normalization. Trim it to null in AIConfigParser like other string fields. Also strengthen resumptionTokenExcludesModelMetadata to decode the token and assert the wire format has no modelKey/modelVersion, rather than relying solely on token equality across two trackers. Co-authored-by: Cursor <[email protected]>
atornsii
marked this pull request as ready for review
July 14, 2026 19:47
atornsii
marked this pull request as draft
July 15, 2026 21:37
Gonfalon moved these two fields from the payload's model object to _ldMeta (launchdarkly/gonfalon#67230) to avoid modelVersion reading as the underlying LLM's own version. Field names are unchanged; only the JSON location moves. Model's public getters and the tracker's stamped event fields are untouched. Co-Authored-By: Claude Fable 5 <[email protected]>
atornsii
marked this pull request as ready for review
July 16, 2026 16:55
Matches the same fix applied to the .NET SDK (dotnet-core PR #308): parseModel reaching into _ldMeta mixed concerns — it should only parse the model object. parseMeta now returns a small ModelIdentity holder (modelKey, modelVersion) alongside populating the builder with the other _ldMeta fields, and parseModel takes them as plain parameters instead of fetching _ldMeta itself. No behavior change; full suite + checkstyle pass. Co-Authored-By: Claude Fable 5 <[email protected]>
…off holder Follow-up to eb440b0: rather than a separate ModelIdentity class, modelKey/modelVersion are now fields on AIConfigFlagValue.Builder alongside enabled/variationKey/version/mode, set by parseMeta the same way as the others. parseModel still only touches the model object, reading modelKey/modelVersion from the builder as plain parameters. No behavior change; full suite + checkstyle pass. Co-Authored-By: Claude Fable 5 <[email protected]>
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 7a1e877. Configure here.
…del type modelKey/modelVersion should only be visible via the tracker's stamped event data, mirroring how variationKey/version are internal-only. They now flow from the already-parsed _ldMeta fields straight into the tracker factory instead of being attached to Model. Co-Authored-By: Claude Sonnet 5 <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Requirements
Related issues
Describe the solution you've provided
Read
modelKeyandmodelVersionfrom AI Config model payloads, expose them on the public model/tracking data types, and stamp them on every emitted tracker metric event. Model version defaults to1, null/empty/whitespace model keys are omitted, and the resumption-token format remains unchanged.Describe alternatives you've considered
This mirrors the established JavaScript and .NET SDK implementations.
Additional context
Depends on AIC-2876 for the backend payload fields.
Test plan
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 lib/sdk/server-ai/gradlew test -p lib/sdk/server-aiJAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 lib/sdk/server-ai/gradlew build -p lib/sdk/server-aiJAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 lib/sdk/server-ai/gradlew javadoc -p lib/sdk/server-ai